package com.travel.controller.user;


import com.travel.common.ServerResponse;
import com.travel.pojo.user.Sign;
import com.travel.pojo.user.TouristUser;
import com.travel.service.HttpClient;
import com.travel.service.tourist_demand.TouristTrabelDemandServer;
import com.travel.service.user.TouristUserServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit;


@RestController
@RequestMapping("/touristuser")
public class TouristUserController {
    @Autowired
    TouristUserServer touristUserServer;

    @Autowired
    TouristTrabelDemandServer trabelDemandServer;

    @Autowired
    RedisTemplate<String,String> redisTemplate;

    @Autowired
    HttpClient httpClient;


    /**
     * 游客登录接口
     * @param tel 电话号码
     * @param pwd 密码
     */
    @GetMapping("/tlogin/{tel}/{pwd}")
    public ServerResponse<TouristUser> tlogin(@PathVariable("tel")String tel,@PathVariable("pwd")String pwd){
       return touristUserServer.login(tel,pwd);
    }

    /**
     * 文件上传，只返回访问路劲，不保存到数据库
     * @param file 文件
     */
    @PostMapping("/uploadFile")
    public ServerResponse<String> uploadFile(MultipartFile file, HttpServletRequest request) throws IOException {
        String url=touristUserServer.uploadfile(file,request);
        System.out.println("文件"+file);
        return ServerResponse.createBySuccess(url);
    }

    /**
     * 账号注册接口
     * @param touristUser 用户信息
     */
    @PostMapping("/tregister")
    @ResponseBody
    public ServerResponse<TouristUser> tregister(TouristUser touristUser){
        return touristUserServer.register(touristUser);
    }

    /**
     * 修改密码接口
     * @param id 用户id
     * @param newpwd 新密码
     * @param usedpwd 老密码
     */
    @PostMapping("/updatetpwd")
    public ServerResponse<String> updatetpwd(int id,String usedpwd,String newpwd){
        return touristUserServer.updatepwdByUsedpwd(id,usedpwd,newpwd);
    }

    /**
     * 根据id修改用户密码，结合手机验证码使用
     * @param tel 用户电话
     * @param newpwd 新密码
     */
    @PostMapping("/updatepwdByTel")
    public ServerResponse<String> updatepwdByCode(String tel,String newpwd){
      return  touristUserServer.updatapwdByTel(tel,newpwd);
    }


    /**
     * 修个信息接口
     * @param touristUser 用户信息
     */
    @PostMapping("/updatetinfon")
    @ResponseBody
    public ServerResponse<String> updateinfon(TouristUser touristUser){
        System.out.println(touristUser);
        return touristUserServer.updateinformation(touristUser);
    }

    /**
     * 修改头像
     * @param id 用户id
     * @param file 上传图片
     */
    @PostMapping("/updateImage/{id}")
    public ServerResponse<Map<String,Object>> updateImage(@PathVariable("id")int id, MultipartFile file, HttpServletRequest request) throws IOException {
      return  touristUserServer.updateImageurl(id,file,request);
    }

    /**
     * 上传团头图
     * @param city 城市名
     * @param file 上传图片
     */
    @PostMapping("/addImage/{city}")
    public ServerResponse<Map<String,Object>> addImage(@PathVariable("city")String city, MultipartFile file, HttpServletRequest request) throws IOException {
        return  touristUserServer.addImageurl(city,file,request);
    }

    /**
     * 修改用户类型
     * @param id 用户id
     * @param usertype 修改用户类型 0游客 1导游
     */
    @PostMapping("/updateUserType")
    public ServerResponse<String> updateUserType(int id,int usertype){
        return touristUserServer.updateUserTypeById(id,usertype);
    }

    /**
     * 发送验证码
     * @param phone 手机号
     */
    @PostMapping("/sendMsg")
    public ServerResponse<String> sendMsg(String phone){
        //构建短信验证码,uuid随机生成验证码截取前四位
        String code= UUID.randomUUID().toString().substring(0,4);
        HashMap<String,Object> map=new HashMap<>();
        map.put("code",code);
        boolean isSend=touristUserServer.sendMsg(phone,map);
        if (isSend){
            //存入redis中，有效期五分钟
            redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES);
            return ServerResponse.createBySuccseeMessage("发送成功");
        }
        return ServerResponse.createByErrorMessage("发送失败,请检查网络是否正常!");
    }

    /**
     * 验证验证码是否正确
     * @param phone 手机号
     * @param usercode 验证码
     */
    @PostMapping("/yzcode")
    public ServerResponse<String> yzCode(String usercode,String phone){
        String code=redisTemplate.opsForValue().get(phone);
        if (!code.equals(usercode)){
          return ServerResponse.createBySuccseeMessage("验证码错误,请检查验证码是否过期!");
        }
        return ServerResponse.createByErrorMessage("验证码正确");
    }

    /**
     * 增加U豆
     * @param userid 用户id
     * @param addnumber 增加数量
     */
    @PostMapping("/addBeanNumber")
    public ServerResponse<Integer> addBeanNumber(int userid,int addnumber){
        return touristUserServer.addUBean(userid,addnumber);
    }


    /**
     *绑定clientid
     * @param userid 用户id
     * @param clientid 用户设备id
     */
    @PostMapping("/updateClientId")
    public ServerResponse<String> updateClientId(int userid,String clientid){
        return touristUserServer.updateClientidById(userid,clientid);
    }

    /**
     * 查询签到信息
     * @param userid 用户id
     */
    @GetMapping("/userSignInformation/{userid}")
    public ServerResponse<Sign> querySign(@PathVariable("userid")int userid){
        return touristUserServer.querySignInformation(userid);
    }

    /**
     *签到
     * @param signid 签到表id
     * @param userid 用户id
     */
    @PostMapping("/userSign")
    public ServerResponse<Map<String,Object>> sign(int userid,int signid){
        return touristUserServer.userSign(userid,signid);
    }





}
